// src/main/java/com/nb/service/ISysMenuService.java
package com.nb.service;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.nb.entity.SysMenuEntity;

/**
 * 菜单表 服务层。
 */
public interface ISysMenuService extends IService<SysMenuEntity> {
    /**
     * 校验菜单名称是否唯一
     *
     * @param menu 菜单信息
     * @return 结果
     */
    boolean checkMenuNameUnique(SysMenuEntity menu);

    /**
     * 校验菜单路径是否唯一
     *
     * @param menu 菜单信息
     * @return 结果
     */
    boolean checkMenuPathUnique(SysMenuEntity menu);

    /**
     * 创建菜单
     *
     * @param menu 菜单信息
     * @return 结果
     */
    boolean createMenu(SysMenuEntity menu);

    /**
     * 校验菜单是否存在
     *
     * @param menuId 菜单ID
     * @return 结果
     */
    boolean checkMenuExists(Long menuId);

    /**
     * 更新菜单
     *
     * @param menu 菜单信息
     * @return 结果
     */
    boolean updateMenu(SysMenuEntity menu);

    /**
     * 删除菜单
     *
     * @param menuId 菜单ID
     * @return 结果
     */
    boolean deleteMenu(Long menuId);

    /**
     * 检查是否存在子菜单
     *
     * @param menuId 菜单ID
     * @return 结果
     */
    boolean hasChildMenus(Long menuId);
    /**
     * 菜单分页查询
     * @param page 页码
     * @param size 每页数量
     * @param name 菜单名称（模糊查询）
     * @param path 路由路径（精确查询）
     * @return 分页结果
     */
    Page<SysMenuEntity> selectMenuPage(int page, int size, String name, String path);
    /**
     * 根据菜单ID查询菜单详情
     * @param menuId 菜单ID
     * @return 菜单详情
     */
    SysMenuEntity selectMenuById(Long menuId);
    /**
     * 更新菜单排序和父菜单
     * @param menuId 菜单ID
     * @param parentId 父菜单ID
     * @param sort 排序值
     * @return 是否更新成功
     */
    boolean updateMenuSortAndParent(Long menuId, Long parentId, Integer sort);

}

